home *** CD-ROM | disk | FTP | other *** search
/ Skunkware 5 / Skunkware 5.iso / src / Tools / archie-1.4.1 / atalloc.c < prev    next >
C/C++ Source or Header  |  1995-06-18  |  2KB  |  93 lines

  1. /*
  2.  * Copyright (c) 1989, 1990 by the University of Washington
  3.  *
  4.  * For copying and distribution information, please see the file
  5.  * <copyright.h>.
  6.  */
  7.  
  8. #include <stdio.h>
  9.  
  10. #include <pfs.h>
  11. #include <pmachine.h> /* for correct definition of ZERO */
  12.  
  13. static PATTRIB    lfree = NULL;
  14. int        pattrib_count = 0;
  15. int        pattrib_max = 0;
  16.  
  17. /*
  18.  * atalloc - allocate and initialize vlink structure
  19.  *
  20.  *    ATALLOC returns a pointer to an initialized structure of type
  21.  *    PATTRIB.  If it is unable to allocate such a structure, it
  22.  *    returns NULL.
  23.  */
  24. PATTRIB
  25. atalloc()
  26.     {
  27.     PATTRIB    at;
  28.     if(lfree) {
  29.         at = lfree;
  30.         lfree = lfree->next;
  31.     }
  32.     else {
  33.         at = (PATTRIB) malloc(sizeof(PATTRIB_ST));
  34.         if (!at) return(NULL);
  35.         pattrib_max++;
  36.     }
  37.  
  38.     pattrib_count++;
  39.  
  40.     ZERO(at);
  41.     /* Initialize and fill in default values; all items are
  42.        0 [or NULL] save precedence */
  43.     at->precedence = ATR_PREC_OBJECT;
  44.  
  45.     return(at);
  46.     }
  47.  
  48. /*
  49.  * atfree - free a PATTRIB structure
  50.  *
  51.  *    ATFREE takes a pointer to a PATTRRIB structure and adds it to
  52.  *    the free list for later reuse.
  53.  */
  54. void
  55. atfree(at)
  56.     PATTRIB    at;
  57.     {
  58.     if(at->aname) stfree(at->aname);
  59.  
  60.     if((strcmp(at->avtype,"ASCII") == 0) && at->value.ascii) 
  61.         stfree(at->value.ascii);
  62.     if((strcmp(at->avtype,"LINK") == 0) && at->value.link) 
  63.         vlfree(at->value.link);
  64.     
  65.     if(at->avtype) stfree(at->avtype);
  66.  
  67.     at->next = lfree;
  68.     at->previous = NULL;
  69.     lfree = at;
  70.     pattrib_count--;
  71.     }
  72.  
  73. /*
  74.  * atlfree - free a PATTRIB structure
  75.  *
  76.  *    ATLFREE takes a pointer to a PATTRIB structure frees it and any linked
  77.  *    PATTRIB structures.  It is used to free an entrie list of PATTRIB
  78.  *    structures.
  79.  */
  80. void
  81. atlfree(at)
  82.     PATTRIB    at;
  83.     {
  84.     PATTRIB    nxt;
  85.  
  86.     while(at != NULL) {
  87.         nxt = at->next;
  88.         atfree(at);
  89.         at = nxt;
  90.     }
  91.     }
  92.  
  93.